import { FormInstance, TableProps } from 'antd'
import { TableRowSelection } from 'antd/lib/table/interface'
import { SearchFormProps } from '@/components/search'
import { Pagination, Pageable, Response } from '@/types'
import { ToolbarPageProps } from './PageType'

/**
 * 列表页表格组件属性
 */
export interface TablePageTableProps
  extends Omit<TableProps, 'dataSource' | 'pagination' | 'rowSelection'> {
  /** 选择配置，内部管理被选择的值 */
  rowSelection?: Omit<TableRowSelection<any>, 'selectedRowKeys'>
}

/**
 * 列表页属性
 */
export interface TablePageProps extends ToolbarPageProps {
  /** 查询条件 */
  queryProps?: false | SearchFormProps
  /** 表格配置 */
  tableProps: TablePageTableProps
  /** API接口，异步方法 */
  api?: (params: any, pageable: Pageable) => Promise<Response<Pagination<any>>>
  /**
   * 请求前处理参数，如格式转换，参数剔除
   * @param params 参数
   * @param form 表单实例
   * @returns 处理后的参数
   */
  beforeRequest?: (params: any, form: FormInstance) => any
  /**
   * 处理接口返回数据，如转换数据结构
   * @param res 接口返回数据，例如 { success: boolean, data: any }
   * @param form 表单实例
   * @returns 表格数据 { data: [], total: number }
   */
  beforeResponse?: (res: any, form: FormInstance) => any
  /**
   * 是否在创建时触发查询，默认为true
   */
  autoSearch?: boolean
  /**
   * 是否启用Loading，默认为True
   */
  useLoading?: boolean
  /**
   * 子内容，将会添加到表格最下方，可以将弹出框等内容放入
   */
  children?: React.ReactNode
}
